package com.ansion.commonchat.startup.workmanager.bwork.utils.taskexecutor;

import android.os.Handler;
import android.os.Looper;

import androidx.annotation.NonNull;

import com.ansion.commonchat.startup.workmanager.bwork.utils.BSerialExecutor;

import java.util.concurrent.Executor;

/**
 * Created by wanghongjie on 2023/5/10
 * Describe : 用于在 Work Manager 的内部执行任务，并且提供了与 Work Manager 相关的任务调度和管理功能。
 * <p>
 * WorkManagerTaskExecutor 主要负责在后台线程中执行任务，例如数据库操作、文件操作、网络请求等。
 * 它使用了 ThreadPoolExecutor 来管理线程池，以便高效地执行多个任务。
 * 通过使用 WorkManagerTaskExecutor，WorkManager 可以确保在适当的时机和合适的线程中执行任务，从而保持应用的响应性和性能。
 * 此外，WorkManagerTaskExecutor 还提供了一些额外的功能，例如任务取消和中断、任务优先级调整等。
 * 它与 WorkManager 的其他组件紧密配合，以实现任务的调度和执行控制。
 */
public class BWorkManagerTaskExecutor implements BTaskExecutor {

    private final BSerialExecutor mBackgroundExecutor;

    public BWorkManagerTaskExecutor(@NonNull Executor backgroundExecutor) {
        mBackgroundExecutor = new BSerialExecutor(backgroundExecutor);
    }

    private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());

    private final Executor mMainThreadExecutor = new Executor() {
        @Override
        public void execute(@NonNull Runnable command) {
            postToMainThread(command);
        }
    };

    @Override
    public void postToMainThread(Runnable runnable) {
        mMainThreadHandler.post(runnable);
    }

    @Override
    public Executor getMainThreadExecutor() {
        return mMainThreadExecutor;
    }

    @Override
    public void executeOnBackgroundThread(Runnable runnable) {
        mBackgroundExecutor.execute(runnable);
    }

    @Override
    @NonNull
    public BSerialExecutor getBackgroundExecutor() {
        return mBackgroundExecutor;
    }
}
